package net.zoneland.knowledge.service;

import com.fasterxml.jackson.core.JsonProcessingException;
import net.zoneland.knowledge.controller.bean.SanHuiYiKeVo;
import net.zoneland.knowledge.model.*;
import net.zoneland.knowledge.service.bean.MemberVo;
import net.zoneland.knowledge.service.bean.WorkReminderVo;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;

public interface WorkReminderService {

    /**
     * 查询省公司工单信息
     * @param vo 查询条件
     * @return 省公司工单信息
     */
    List<TaskReminderMainWork> getProvinceWorkList(final WorkReminderVo vo);

    /**
     * 查询省公司子工单信息
     * @param mainWorkId 主工单id
     * @return 省公司子工单信息
     */
    List<TaskReminderSubWork> getProvinceSubWorkList(final String mainWorkId);

    /**
     * 新增修改省公司主工单
     * @param mainWork 工单信息
     */
    TaskReminderMainWork saveOrUpdateProvinceWork(final TaskReminderMainWork mainWork, final LoginUserPojo loginUserPojo);

    /**
     * 新增修改省公司子工单
     * @param subWork 子工单信息
     */
    void saveOrUpdateProvinceSubWork(final TaskReminderSubWork subWork);

    /**
     * 删除省公司主工单
     * @param mainWork 主工单信息
     */
    void deleteProvinceMainWork(final TaskReminderMainWork mainWork);

    /**
     * 删除省公司子工单
     * @param subWork 子工单信息
     */
    void deleteProvinceSubWork(final TaskReminderSubWork subWork);

    /**
     * 下发任务
     * @param mainWorks 工单信息
     */
    void issuedWork(final List<TaskReminderMainWork> mainWorks, final LoginUserPojo user, final HttpServletRequest request);

    /**
     * 接受工单信息
     * @param mainWork 工单信息
     */
    void acceptWork(final TaskReminderMainWork mainWork);

    /**
     * 修改市公司主工单信息
     * @param mainWork 主工单信息
     */
    TaskReminderMainWork saveOrUpdateCityMainWork(final TaskReminderMainWork mainWork, final LoginUserPojo loginUserPojo);

    /**
     * 修改市公司子工单信息
     * @param subWork 子工单信息
     */
    void updateCitySubWork(final TaskReminderSubWork subWork);

    /**
     * 删除市公司主工单
     * @param mainWork 主工单信息
     */
    void deleteCityMainWork(final TaskReminderMainWork mainWork);

    /**
     * 删除市公司子工单信息
     * @param subWork 子工单信息
     */
    void deleteCitySubWork(final TaskReminderSubWork subWork);

    /**
     * 新增市公司子工单信息
     * @param subWork 子工单信息
     */
    void saveCitySubWork(final TaskReminderSubWork subWork);

    /**
     * 查询市公司工单信息
     * @param vo 查询条件
     * @return 市公司工单信息
     */
    List<TaskReminderMainWork> getCityWorkList(final WorkReminderVo vo);

    /**
     * 查询市公司子工单信息
     * @param mainWorkId 主工单id
     * @return 市公司子工单信息
     */
    List<TaskReminderSubWork> getCitySubWorkList(final String mainWorkId);

    /**
     * 查询支部工单信息
     * @param vo 查询条件
     * @return 支部工单信息列表
     */
    List<TaskReminderMainWork> getBranchWorkList(final WorkReminderVo vo);

    /**
     * 查询支部子工单信息
     * @param mainWorkId 主工单id
     * @return 支部子工单信息
     */
    List<TaskReminderSubWork> getBranchSubWorkList(final String mainWorkId);

    /**
     * 查询组织树.
     * @return 党组织集合
     */
    List<PartyOrg> getOrgTree();

    /**
     * 查询市公司党办人员列表
     * @return 市公司党办人员列表
     */
    List<PartyUser> getCityPartyUser();

    /**
     * 查询干事人员列表
     * @param companyName 公司名称
     * @return 干事人员列表
     */
    List<PartyUser> getGanshiByCompany(final String companyName);

    /**
     * 保存默认下发人员信息
     * @param userList 用户id列表
     * @param issuedType 下发类型
     */
    void saveDefaultMembers(final List<MemberVo> userList, final String issuedType, final String companyName);

    /**
     * 获取默认人员信息列表
     * @param companyName 所属公司名称
     * @return 默认人员信息列表
     */
    List<IssuedMember> getDefaultMembers(final String companyName);

    /**
     * 自动匹配查询会议信息
     * @param sanHuiYiKeVo 查询条件
     * @return 会议列表
     */
    List<SanHuiYiKe> autoSearchMeetingList(final SanHuiYiKeVo sanHuiYiKeVo);

    /**
     * 手动匹配查询会议信息
     * @param sanHuiYiKeVo 查询条件
     * @return 会议列表
     */
    List<SanHuiYiKe> searchMeetingList(final SanHuiYiKeVo sanHuiYiKeVo);

    /**
     * 确认完成任务
     * @param request 传入参数
     * @param user 用户信息
     * @throws JsonProcessingException json异常
     */
    void finishWork(final HttpServletRequest request, final LoginUserPojo user ) throws JsonProcessingException;

    /**
     * 获取会议信息
     * @param mainWork 主工单信息
     * @return 会议信息
     */
    List<SanHuiYiKe> searchMeetingByMainWork(final TaskReminderMainWork mainWork);

    /**
     * 根据主工单获取附件信息
     * @param mainWorkOrderId 主工单id
     * @return 附件信息
     */
    List<BranchAttachment> getBranchAttachmentByMainWork(final String mainWorkOrderId);

    /**
     * 根据id获取附件信息
     * @param id id
     * @return 附件信息
     */
    BranchAttachment getBranchAttachmentById(final String id);

    /**
     * 查询支部主工单信息列表
     * @param mainWork 市公司主工单信息
     * @return
     */
    List<TaskReminderMainWork> getBranchMainWorkByParentWorkId(final TaskReminderMainWork mainWork);

    /**
     * 保存文件
     * @param request 请求参数
     * @param mainWork 主工单信息
     * @param user 用户信息
     */
    void saveFile(final HttpServletRequest request, final TaskReminderMainWork mainWork, final LoginUserPojo user);

    /**
     * 根据附件id删除附件信息
     * @param fileId 附件id
     */
    void deleteBranchAttachmentById(final String fileId);

    /**
     * 查询市公司主工单信息
     * @param parentMainId 支部父工单id
     * @return 市公司主工单信息
     */
    TaskReminderMainWork getCityMainWorkByMainWorkId(final String parentMainId);

    /**
     * 获取总支和支部组成的组织结构
     * @param orgUuid 支部orgUuid
     * @return 总支和支部组成的组织结构列表
     */
    List<PartyOrg> getBranchByOrgUuid(final String orgUuid);

    /**
     * 提醒内容导出
     * @param workReminderVo 导出条件
     */
    void remindersContentExport(final WorkReminderVo workReminderVo, final HttpServletResponse response);


}
